<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="rurple.css" type="text/css" />

<title>RUR-PLE lessons</title>
</head>
<body>
<h2 class="title">Learning Python: Child's Play with
RUR-PLE!</h2>

<h6>André Roberge, © 2004-2010</h6> 

<p>The following is a list of all available lessons.</p>

<h3 class="section">Part 1. Welcome to Reeborg's world.</h3>

<p>In this first part, we start our learning adventure in Reeborg's world.
We will learn how to write some simple computer programs.</p>

<ul>
<li><a href="intro/1-browser.htm">1. About the browser</a><br/>
This first lesson briefly describes the browser included within
RUR-PLE.</li>
<li><a href="intro/2-explore.htm">2. Reeborg explores its
world</a><br/>
In this lesson, you will start getting familiar with Reeborg's
environment and learn to use arrows on the keyboard to make
Reeborg move.</li>
<li><a href="intro/3-first_program.htm">3. First program</a><br/>
This lesson what we mean by computer program and introduces two
instructions for Reeborg: <code>move()</code> and
<code>turn_off().</code></li>
<li><a href="intro/4-errors.htm">4. Dealing with eRRoRs</a><br/>
Learning about the case sensitivity of Python.</li>
<li><a href="intro/5-comments.htm">5. Any comments? <i>Avez-vous
des commentaires?</i></a><br/>
We learn how to add additional explanations meant only for humans
in programs. These are called <em>comments</em>. We also learn
about translating the instructions obeyed by Reeborg into other
human languages using synonyms. This is closely related to the concept of
<i>variables</i> which will be introduced much later.</li>
<li><a href="intro/6-left.htm">6. Making a left turn</a><br/>
We learn about another instruction for Reeborg:
<code>turn_left().</code></li>
<li><a href="intro/7-beepers.htm">7. Beepers</a><br/>
We learn about beepers and the last two commands that Reeborg can
obey: <code>pick_beeper()</code> and
<code>put_beeper()</code>.</li>
<li><a href="intro/8-bugs.htm">8. Darn bugs!</a><br/>
In this lesson we learn about bugs and how RUR-PLE can help us
find and quash them.</li>
<li><a href="intro/9-walls.htm">9. Building walls</a><br/>
We learn how to add or remove walls in Reeborg's world; this
lesson concludes with a few programming challenges.</li>
</ul>

<h3 class="section">Part 2. Reeborg knows Python.</h3>
<p>In this second part, we will learn our first Python keywords
and how we can use them to help Reeborg accomplish various tasks
of increasing difficulty while making it easier for us to write
programs.</p>

<ul>
<li><a href="intro/10-def.htm">10. Definitely avoiding
repetitions</a><br/>
In this lesson, we learn our first python keyword: <span class=
"pykeyword">def</span>.</li>
<li><a href="intro/11-repeat.htm">11. Avoiding repetitions,
again!</a><br/>
Here, we learn how Reeborg can repeat instructions
automatically.</li>
<li><a href="intro/12-if.htm">12. If only Reeborg could decide on
his own ...</a><br/>
In this lesson, we learn our second Python keyword: <span class=
"pykeyword">if</span>.</li>
<li><a href="intro/13-else.htm">13. Listen to me ... or else
....</a><br/>
In this lesson, we learn our third Python keyword: <span class=
"pykeyword">else</span>.</li>
<li><a href="intro/14-elif.htm">14. If, else, if, else,
....</a><br/>
In this lesson, we learn our fourth and fifth Python keywords:
<span class="pykeyword">elif</span> and <span class=
"pykeyword">pass</span>.</li>
<li><a href="intro/15-not.htm">15. Not true!?</a><br/>
In this lesson, we learn our sixth Python keyword: <span class=
"pykeyword">not</span>.</li>
<li><a href="intro/16-while.htm">16. For a while</a><br/>
In this lesson, we learn our seventh Python keyword: <span class=
"pykeyword">while</span>.</li>
<li><a href="intro/17-amazing1.htm">17. Amazing - part 1</a><br/>
We put together all we've learned so far to solve a series of
exercises, with a surprising conclusion.</li>
<li><a href="intro/18-amazing2.htm">18. Amazing - part 2</a></li>
<li><a href="intro/19-amazing3.htm">19. Amazing - part 3</a></li>
<li><a href="intro/20-amazing4.htm">20. Amazing - part 4</a></li>
<li><a href="intro/21-amazing5.htm">21. Amazing - part 5</a></li>
<li><a href="intro/22-rain.htm">22. It's raining!</a><br/>
Help Reeborg close the window in his house to prevent the rain
from coming in.</li>
<li><a href="intro/23-trash.htm">23. After the storm</a><br/>
Help Reeborg clean up his yard after a wind storm.</li>
<li><a href="intro/24-adding.htm">24. Teaching Reeborg to
add.</a><br/>
We teach Reeborg how to add two numbers on his own. After this
lesson, we will temporarily leave Reeborg's world to learn more
about Python itself.</li>
</ul>

<h3 class="section">Part 3. Python, the interpreter.</h3>
<p>In this third part, we will learn about the Python
interpreter. We will also learn about numbers, strings, lists,
tuples and dictionaries. This third part is very similar to a traditional
beginner's tutorial to Python ... except that we can still
have fun with Reeborg!</p>

<ul>
<li>
<a href="inter/25-interpreter.htm">25. Python already knows
how to add.</a><br/>
In this lesson, we explore how Python adds, subtracts,
multiplies, divides, ..., numbers.</li>
<li><a href="inter/26-interpreter2.htm">26. Interpreting the Python keywords</a><br/>
In this lesson we explore how the Python interpreter deals
with a few of the Python keywords that we already know.</li>
<li><a href="inter/27-variables.htm">27. Variables</a><br/>
In this lesson, we introduce the very important concept of <i>variables</i></li>
<li><a href="inter/28-variables2.htm">28. Variables and functions</a><br/>
In this lesson we will see how we can use functions and variables together.</li>
<li><a href="inter/29-strings.htm">29. What's your name?</a><br/>
In this lesson, we learn to use variables to represent strings.
We also learn about <i>slicing</i>.</li>
<li><a href="inter/30-dot.htm">30. Object-Oriented Programming:  "dot" notation</a><br/>
In this lesson we will learn about the "dot" notation that
is used commonly in Object-Oriented Programming languages.  
We will also learn something new about Reeborg's world.</li>
<li><a href="inter/31-global.htm">31. Globalization is a bad thing.</a><br/>
In this lesson, we will learn a new Python keyword: 
<span class="pykeyword">global</span>.</li>
<li><a href="inter/32-return.htm">32. Many returns</a><br/>
In this lesson we learn about a new Python keyword, 
<span class="pykeyword">return</span>, so that we can write even more
useful functions.</li>
<li><a href="inter/33-for.htm">33. Repeat() is hiding some Python keywords</a><br/>
In this lesson, we learn about two new Python keywords that we have briefly
seen before: <span class="pykeyword">for</span> and
<span class="pykeyword">in</span>.</li>
<li><a href="inter/34-lists.htm">34. Chocolate mousse cake recipe</a><br/>
In this lesson we learn about Python <i>lists</i>, see how we can find out
all the method for a given Python object, learn about a new keyword, 
<span class="pykeyword">del</span>.  We also learn something new about
the function <tt>range()</tt>.</li>
<li><a href="inter/35-dicts.htm">35. An other kind of definition</a><br/>
In this lesson we learn about Python <i>dicts</i>, as well as the built-in
function <tt>str()</tt>.</li>
<li><a href="inter/36-tuples.htm">36. Our last sequence</a><br/>
In this lesson we learn about Python <i>tuples</i>, as well as the 
difference between <i>mutable</i> and <i>immutable</i> objects. </li>
<li><a href="inter/37-class.htm">37. Fixing up Reeborg</a><br/>
An introduction to the idea of creating a new class by inheriting from an existing one.</li>
<li><a href="inter/38-class2.htm">38. A touch of class</a><br/>
Two more subclassing examples in Reeborg's world.</li>
<li><a href="inter/39-import.htm">39. Avoiding repetitions - the important stuff</a><br/>
We will learn about importing modules.</li>
<li><a href="inter/40-random.htm">40. Random escapes</a><br/>
We look at two relatively simple programs that rely on random turns and moves to find the exit from a maze. The first one checks for the presence of a
wall in front and moves only if there is none present. Example of
<i>Look before you leap.</i><br/>
The second catches exceptions (rather than checking for the
presence of a wall). Example of <i>Better to ask forgiveness than
permission.</i><br/>
This lesson introduces the Python keywords <span class=
"pykeyword">try</span>, <span class="pykeyword">except</span>, and <span class="pykeyword">raise</span>.</li>
</ul>

<h3 class="section">Advanced lessons</h3>
<p>The following lessons are presented as individual topics, each more or less standing on its own.  They are meant to be the beginning points of some further exploration, or useful for teachers.</p>

<ul>
<li><a href="advanced/41-fairy_tale.htm">41. A Robotic Fairy Tale</a><br/>
A review exercise presented as a Fairy Tale.</li>
<li><a href="advanced/42-numbers.htm">42. Octal, hexadecimal and binary numbers</a><br/>
In this lesson, we have a brief look at binary, octal and hexadecimal numbers.</li>
<li><a href="advanced/43-sorting.htm">43. Sorting</a><br/>
Some suggested sorting exercises in Reeborg's world.</li>
<li><a href="advanced/44-fractions.htm">44. Fractions - Part 1</a><br/>
We define and print fractions.</li>
<li><a href="advanced/45-fractions2.htm">45. Fractions - Part 2</a><br/>
We multiply fractions and learn about an ancient algorithm.</li>
<li><a href="advanced/46-fractions3.htm">46. Fractions - Part 3</a><br/>
We define, add and subtract fractions.</li>
<li><a href="advanced/47-fractions4.htm">47. Fractions - Part 4</a><br/>
We combine fractions with integers.</li>
<li><a href="advanced/48-beyond_python.htm">48. Beyond Python</a><br/>
We search square roots of fractions and encounter surprising problems which we 
cannot solve with Python.</li>
<li><a href="advanced/49-input.htm">49. Reeborg asks you: to do</a></li>
<li><a href="advanced/50-images.htm">50. Using custom made images: to do</a></li>
<li><a href="advanced/51-editor.htm">51. Using the built-in editor: to do</a></li>
<li><a href="advanced/52-lightning.htm">52. Using Lightning Compiler: the basics: to do</a></li>
<li><a href="advanced/53-lightning2.htm">53. Using Lightning Compiler: doctests: to do</a></li>
</ul>

<h3 class="section">Appendix</h3>
<p>
<a href="summary.htm">Summary of instructions</a><br />
<a href="about.htm">About RUR-PLE</a> <br />
<a href="acknowledgements.htm">Acknowledgements</a><br />
</p>

</body>
</html>
